﻿package com.zouloux.core.data.remote 
{
	import com.zouloux.core.data.IDataCollection;
	import com.zouloux.core.data.parse.DataParser;
	import com.zouloux.core.data.parse.IDataParser;
	import flash.events.EventDispatcher;
	import flash.net.Responder;
	
	/**
	 * ...
	 * @author ZoulouX
	 */
	public class ARemote extends EventDispatcher
	{
		/**
		 * Le parseur de données
		 */
		protected var _parser				:IDataParser 			= new DataParser();
		
		/**
		 * Parser automatiquement
		 */
		protected var _autoParse			:Boolean				= true;
		
		/**
		 * Parser en strict
		 * Si strictParse est sur false, les erreurs de parse ne déclencheront pas d'erreur
		 */
		protected var _strictParse			:Boolean				= false;
		
		/**
		 * Les dernières données reçues par le service, après le parse
		 */
		protected var _lastResults			:*;
		
		/**
		 * Les dernières données reçues par le service, avant le parse
		 */
		protected var _lastData				:*;
		
		
		/**
		 * Le parseur de données
		 */
		public function get parser():IDataParser { return _parser; }
		public function set parser(value:IDataParser):void 
		{
			_parser = value;
		}
		
		/**
		 * Défini si la routine doit parser automatiquement les réponses
		 */
		public function get autoParse():Boolean { return _autoParse; }
		public function set autoParse(value:Boolean):void 
		{
			_autoParse = value;
		}
		
		/**
		 * Défini si les parseError déclenchent des erreurs ou non
		 */
		public function get strictParse():Boolean { return _strictParse; }
		public function set strictParse(value:Boolean):void 
		{
			_strictParse = value;
		}
		
		/**
		 * Récupérer les dernières données reçues par le service, après le parse
		 */
		public function get lastResults():* { return _lastResults; }
		
		/**
		 * Récupérer les dernières données reçues par le service, avant le parse
		 */
		public function get lastData():* { return _lastData; }
		
		
		/**
		 * La remote abstraite
		 */
		public function ARemote ()
		{
			//throw new Error("Don't instanciate abstract class!");
		}
	}
}